package wang.Seacher.util;

import java.text.SimpleDateFormat;
import java.util.Calendar;


/**
 * 
 * @名称: DateTimeUtil.java
 * @包名： util
 * @描述: 日期工具类
 * @author： wangqiang
 * @日期：2016-5-19 下午1:54:10
 */
public class DateTimeUtil {
	
	/**  本年的第几天  **/
	private static final String dayOfYear = "D";
	/**  本月第几个星期  **/
	private static final String weekOfMouth = "W";
	/**  本年第几个星期  **/
	private static final String weekOfYear = "w";
	/**  中文格式时间  年月日 星期  时间  **/
	private static final String chineseTime = "yyyy年 MM月 dd日 E HH:mm:ss";
	/** 24小时制时间 **/
	private static final String simple24= "yyyy-MM-dd HH:mm:ss";
	/** 12小时制时间 **/
	private static final String simple12= "yyyy-MM-dd hh:mm:ss";
	/** 时间长串 包涵   年  月  日  时 分 秒  **/
	private static final String dtLong= "yyyyMMddHHmmss";
	/** 时间长串 包涵    年  月  日  **/
	private static final String dtShort= "yyyyMMdd";
	/**  24小时制时间     **/
	private static final String time24 = "HH:mm:ss";
	/**  12小时制时间     **/
	private static final String time12 = "hh:mm:ss";
	/**  年     **/
	private static final String year = "yyyy";
	/**  月     **/
	private static final String mounth = "MM";
	/**  日     **/
	private static final String day = "dd";
	/**  小时(24制)     **/
	private static final String hour24 = "HH";
	/**  小时(12制)     **/
	private static final String hour12 = "hh";
	/**  分钟     **/
	private static final String minute = "mm";
	/**  秒钟     **/
	private static final String second = "ss";
	/**  秒钟(精确到毫秒)     **/
	private static final String millisecond = "ss.sss 毫秒";
	/**  下午     **/
	private static final String pm = " PM";
	/**  上午     **/
	private static final String am = " AM";
	
	
	
	//测试代码用的主函数
 
	public static void main(String[] args) {
		DateTimeUtil dt = new DateTimeUtil();
		System.out.println(dt.getDate(dayOfYear));
		System.out.println("24小时制:  "+dt.getDateTime24());
		System.out.println("12小时制:  "+dt.getDateTime12());
		System.out.println("时间长串:  "+dt.getDateTimeLong());
		System.out.println("时间短串:  "+dt.getDateTimeShort());
		System.out.println("24小时制时间:   "+dt.getTime24());
		System.out.println("12小时制时间:   "+dt.getTime12());
		System.out.println("年份:  "+dt.getYear());
		System.out.println("月份:  "+dt.getMounth());
		System.out.println("日:  "+dt.getDay());
		System.out.println("小时(24):  "+dt.getHour24());
		System.out.println("小时(12):  "+dt.getHour12());
		System.out.println("分钟:  "+dt.getMinute());
		System.out.println("秒钟:  "+dt.getSecond());
		System.out.println("毫秒:  "+dt.getMillisecond());
		
	}
	
	
	/**
	 * <p>
	 * 将毫秒转化为时分秒
	 * </p>
	 * 
	 * @author： wangqiang
	 * @日期：2016-6-3 上午9:21:51
	 * @param ms
	 * @return
	 */
	public static String formatTime(Long ms) {
		Integer ss = 1000;
		Integer mi = ss * 60;
		Integer hh = mi * 60;
		Integer dd = hh * 24;

		Long day = ms / dd;
		Long hour = (ms - day * dd) / hh;
		Long minute = (ms - day * dd - hour * hh) / mi;
		Long second = (ms - day * dd - hour * hh - minute * mi) / ss;
		Long milliSecond = ms - day * dd - hour * hh - minute * mi - second * ss;

		StringBuffer sb = new StringBuffer();
		if (day > 0) {
			sb.append(day + "天");
		}
		if (hour > 0) {
			sb.append(hour + "小时");
		}
		if (minute > 0) {
			sb.append(minute + "分");
		}
		if (second > 0) {
			sb.append(second + "秒");
		}
		if (milliSecond > 0) {
			sb.append(milliSecond + "毫秒");
		}
		return sb.toString();
	}
	
	
	/**
	 * 传入需要得到的时间的格式,取得时间字符串
	 * 
	 * @author： wangqiang
	 * @日期：2016-5-20 上午10:23:14
	 * @param format 指定时间格式
	 * @return
	 */
	public String getDate(String format){
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		return sdf.format(getNow());
	}
	
	
	/**  秒钟(毫秒)     **/
	public String getMillisecond(){
		SimpleDateFormat sdf = new SimpleDateFormat(millisecond);
		return sdf.format(getNow());
	}
	
	/**  秒钟     **/
	public String getSecond(){
		SimpleDateFormat sdf = new SimpleDateFormat(second);
		return sdf.format(getNow());
	}
	
	/**  分钟     **/
	public String getMinute(){
		SimpleDateFormat sdf = new SimpleDateFormat(minute);
		return sdf.format(getNow());
	}
	
	/**  小时(12制)     **/
	public String getHour12(){
		SimpleDateFormat sdf = new SimpleDateFormat(hour12);
		String hour24 = getHour24();
		Integer hour = Integer.valueOf(hour24);
		if(hour > 12){
//			return String.valueOf(hour-12)+ pm;
			return sdf.format(getNow()) + pm;
		}
		return sdf.format(getNow());
	}
	
	/**  小时(24制)     **/
	public String getHour24(){
		SimpleDateFormat sdf = new SimpleDateFormat(hour24);
		return sdf.format(getNow());
	}
	
	/**  日     **/
	public String getDay(){
		SimpleDateFormat sdf = new SimpleDateFormat(day);
		return sdf.format(getNow());
	}
	
	/**  月     **/
	public String getMounth(){
		SimpleDateFormat sdf = new SimpleDateFormat(mounth);
		return sdf.format(getNow());
	}
	
	/**  年     **/
	public String getYear(){
		SimpleDateFormat sdf = new SimpleDateFormat(year);
		return sdf.format(getNow());
	}
	
	/**  12小时制时间     **/
	public String getTime12(){
		SimpleDateFormat sdf = new SimpleDateFormat(time12);
		String hour24 = getHour24();
		Integer hour = Integer.valueOf(hour24);
		if(hour > 12){
			return sdf.format(getNow()) + pm;
		}
		return sdf.format(getNow()) + am;
	}
	
	/**  24小时制时间     **/
	public String getTime24(){
		SimpleDateFormat sdf = new SimpleDateFormat(time24);
		return sdf.format(getNow());
	}
	
	/** 取得时间短串  年 月 日 **/
	public String getDateTimeShort(){
		SimpleDateFormat sdf = new SimpleDateFormat(dtShort);
		return sdf.format(getNow());
	}
	
	/** 取得时间长串  年 月 日 时 分 秒**/
	public String getDateTimeLong(){
		SimpleDateFormat sdf = new SimpleDateFormat(dtLong);
		return sdf.format(getNow());
	}
	
	/** 取得12小时制 年月日+时间 **/
	public String getDateTime12(){
		SimpleDateFormat sdf = new SimpleDateFormat(simple12);
		return sdf.format(getNow());
	}
	
	/** 取得24小时制 年月日+时间 **/
	public String getDateTime24(){
		SimpleDateFormat sdf = new SimpleDateFormat(simple24);
		return sdf.format(getNow());
	}
	
	/**  中文格式时间  年月日 星期  时间  **/
	public String getchineseTime(){
		SimpleDateFormat sdf = new SimpleDateFormat(chineseTime);
		return sdf.format(getNow());
	}
	/**  本年的第几周 **/
	public String getweekOfYear(){
		SimpleDateFormat sdf = new SimpleDateFormat(weekOfYear);
		return sdf.format(getNow());
	}
	/**  本月的第几周  **/
	public String getweekOfMouth(){
		SimpleDateFormat sdf = new SimpleDateFormat(weekOfMouth);
		return sdf.format(getNow());
	}
	
	/** 取得当前时间(long类型) **/
	public static long getNow(){
		Calendar calendar = Calendar.getInstance();
		long time = calendar.getTime().getTime();
		return time;
	}
}
